#ifndef ROTATEBUTTON_H
#define ROTATEBUTTON_H

#include <QPushButton>
#include <QPainter>
#include <QPixmap>

// 枚举定义旋转方向
enum class RotateDirection
{
    Clockwise,        // 顺时针
    CounterClockwise  // 逆时针
};

class RotateButton : public QPushButton
{
    Q_OBJECT

  public:
    explicit RotateButton(RotateDirection direction, QWidget* parent = nullptr);

    // 设置旋转方向
    void setDirection(RotateDirection direction);

    // 设置边框颜色
    void setBorderColor(const QColor& color);
    // 设置边框宽度
    void setBorderWidth(int width);
    // 设置箭头颜色
    void setArrowColor(const QColor& color);

  protected:
    // 重写绘制事件
    void paintEvent(QPaintEvent* event) override;
    // 鼠标事件用于悬停效果
    bool event(QEvent* event) override;
    // 调整大小时重新生成缓存图像
    void resizeEvent(QResizeEvent* event) override;

  private:
    // 生成缓存图像
    void generateCache();

    // 绘制旋转箭头
    void drawRotateArrow(QPainter& painter, int centerX, int centerY, int arrowSize, bool isClockwise);

  private:
    RotateDirection m_direction;  // 存储当前旋转方向
    QColor m_borderColor;         // 边框颜色
    int m_borderWidth;            // 边框宽度
    QColor m_arrowColor;          // 箭头颜色
    bool m_isHovered;             // 鼠标悬停状态
    QPixmap m_cache;              // 缓存绘制图像
};

#endif  // ROTATEBUTTON_H